const db = require('../db/index')
const bcrypt = require('bcryptjs') // bcryptjs包，密码加密

const jwt = require('jsonwebtoken') // 导入生成token的包
const config = require('../config') // 导入全局的配置文件

// 注册新用户
exports.regUser = (req, res)=> {
    const userinfo = req.body //接受表单数据
    // 判断表单数据是否合法
    // if(!userinfo.username || !userinfo.password) {
    //     res.cc('用户名或密码不能为空')
    // }

    const sqlStr = 'select * from ev_user where username=?'
    db.query(sqlStr, [userinfo.username], (err, result)=> { // mysql查询语句，result得到的是一个数组
        // sql语句执行失败
        if(err) {
            return res.cc(err)
        }
        // 判断数据库是否有数据
        if(result.length > 0) {
            return res.cc('用户名已存在，请重新输入！')
        }
        // 调用bcrypt.hashSync() 方法对密码进行加密
        userinfo.password = bcrypt.hashSync(userinfo.password, 10)
        // 插入新用户的mysql语句
        const sql = 'insert into ev_user set ?'
        db.query(sql, {username: userinfo.username, password: userinfo.password}, (err, result)=> {
            if(err) return res.cc(err)
            if(result.affectedRows !== 1) { //通过result.affectedRows判断数据是否插入成功
                return res.cc('注册用户失败，请稍后重试！')
            }
            res.cc('注册成功！', 0)
        })
    })

    // res.send('reguser OK')
}

// 登录
exports.login = (req, res)=> {
    const userinfo = req.body
    const sqlStr = 'select * from ev_user where username=?'
    db.query(sqlStr, userinfo.username, (err, result)=> {
        if(err) return res.cc(err)
        // 判断有没有查到数据
        if(result.length !== 1) return res.cc("用户名不存在，登录失败！")

        // 判断密码是否正确
        // bcrypt.compareSync(登录的密码, 数据库的密码) 返回的结果为true，证明登录成功，false为失败
        const compareResult = bcrypt.compareSync(userinfo.password, result[0].password)
        if(!compareResult) return res.cc('登录失败！')

        // 在服务器端生成token字符串
        const user = { ...result[0], password: '', user_pic: '' }
        // 对用户信息进行加密，生成token字符串，jwt.sign(用户信息, token加密密钥, token到期时间)
        const tokenStr = jwt.sign(user, config.jwtSecretKey, {expiresIn: config.expiresIn})
        // 响应给客户端
        res.send({
            status: 0,
            msg: '登录成功',
            token: 'Bearer ' + tokenStr,
        })
    })
    
}